solid principles in java interview questions